package pacote;


public class Main {

	public static void main(String[] args) {
		Rede rede = new Rede();
	  //<--INICIALIZA SUB-REDE 1-->		
		Subrede sub_rede_1 = new Subrede(new Ip("125.10.45.0"), "/30");
		RoteadorDeBorda roteador_de_borda_1 = new RoteadorDeBorda(sub_rede_1);
		
		Host host_1 = new Host(sub_rede_1);
		Host host_2 = new Host(sub_rede_1);

	  //<--INICIALIZA SUB-REDE 2-->	
		Subrede sub_rede_2 = new Subrede(new Ip("243.50.13.0"), "/30");
		
		RoteadorDeBorda roteador_de_borda_2 = new RoteadorDeBorda(sub_rede_2);
		
		Host host_3 = new Host(sub_rede_2);
		Host host_4 = new Host(sub_rede_2);
		
	  //<--INICIALIZA ROTEADOR CENTRAL-->			
		RoteadorCentral roteador_central = new RoteadorCentral(rede);

      //<--ADICIONA SUB-REDES NA REDE-->	
		rede.addSubrede(sub_rede_1);
		rede.addSubrede(sub_rede_2);

	  //<--ATIVA HOSTS E ROTEADORES DE BORDA-->	
		if(roteador_de_borda_1.N_Activate_Request()){
			roteador_de_borda_1.start();
			
			if(host_1.N_Activate_Request())
				host_1.start();
				
			if(host_2.N_Activate_Request())
				host_2.start();
		}

		if(roteador_de_borda_2.N_Activate_Request()){
			roteador_de_borda_2.start();

			if(host_3.N_Activate_Request())
				host_3.start();
			if(host_4.N_Activate_Request())
				host_4.start();
		}
		
		roteador_central.start();

		//<--ENVIO INTRA SUB-REDE 1-->		
		String data = "Host 2 da Subrede 1 enviando datagrama para Host 1 da Subrede 1";
		//host_2.N_Data_Request(null, host_2,  host_1.getIp(), data, 8*data.length());
		data = "Host 1 da Subrede 1 enviando datagrama para Host 2 da Subrede 1";
		host_1.N_Data_Request(null, host_1,  host_2.getIp(), data, 8*data.length());
		
		//<--ENVIO INTRA SUB-REDE 2-->		
		data = "Host 4 da Subrede 2 enviando datagrama para Host 3 da Subrede 2";
		//host_4.N_Data_Request(null, host_4,  host_3.getIp(), data, 8*data.length());
		data = "Host 3 da Subrede 2 enviando datagrama para Host 4 da Subrede 2";
		//host_3.N_Data_Request(null, host_3,  host_4.getIp(), data, 8*data.length());

		//<--ENVIO INTER SUB-REDES 1 E 2-->		
		data = "Host 3 da Subrede 2 enviando datagrama para Host 2 da Subrede 1";
		//host_3.N_Data_Request(null, host_3,  host_2.getIp(), data, 8*data.length());
		data = "Host 2 da Subrede 1 enviando datagrama para Host 3 da Subrede 2";
		//host_2.N_Data_Request(null, host_2,  host_3.getIp(), data, 8*data.length());

		//<--ENVIO PARA HOST INEXISTENTE-->		
		//host_3.N_Data_Request(null, host_3,  new Ip("1.2.3.4"), data, 8*data.length());
		
		//<--FINALIZA HOSTS, ROTEADORES DE BORDA E ROTEADOR CENTRAL-->
		/*
		host_1.N_Deactivate_Request();
		host_2.N_Deactivate_Request();
		host_1.stop();
		host_2.stop();

		host_3.N_Deactivate_Request();
		host_4.N_Deactivate_Request();
		host_3.stop();
		host_4.stop();

		
		roteador_de_borda_1.N_Deactivate_Request();
		roteador_de_borda_2.N_Deactivate_Request();
		roteador_de_borda_1.stop();
		roteador_de_borda_2.stop();
		
		roteador_central.N_Deactivate_Request();
		roteador_central.stop();
		*/
	}
}
